/**
 * Controller.java
 * Servlet utilizzata per la gestione di tutte le richieste da parte del cliente.
 * Processa e delega il lavoro alle altre classi.
 */

package war;

import ejb.*;
import java.io.IOException;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.google.gdata.client.calendar.*;
import com.google.gdata.data.*;

import com.google.gdata.data.calendar.*;
import com.google.gdata.data.extensions.*;
import com.google.gdata.util.*;
import java.net.URL;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author Rosario Salone
 */

public class Controller extends HttpServlet {
      @Resource(mappedName = "jms/Provider")
    private Queue provider;
    @Resource(mappedName = "jms/ProviderFactory")
    private ConnectionFactory providerFactory;
    //collegamento ai session bean
    @EJB
    private UtenRemote utenBean;
    @EJB
    private ManagerLocal managerBean;

    
    //variabili relative all'utente
    private String nome;
    private String cognome;
    private String telefono;
    private String indirizzo;
    private String citta;
    private String codiceFiscale;
    private String login;
    private String password;
    private String rippassword;
    
            
    
   
    /** 
     * Metodo che processa le richieste provenienti sia dal HTTP GET, sia dal HTTP POST.
     * Attraverso l'utilizzo delle interfacce UtenteRemote e ManagerLocal
     * consente la comunicazione tra le richieste dell'utenza e il database.
     * Per ogni richiesta proveniente dalle pagine jsp il metodo
     * gestirà le richieste dell'utenza e le risposte. 
     * Oltretutto ad ogni inserimento di una prenotazione, di un evento, di un utenza
     * utilizzerà la classe CalendarFeedD per processare le richieste,
     * da parte dell'amministratore del sito, ai client di GoogleCalendar.
     * Agli utenti gmail sarà inoltre richiesto ad ogni accesso di inserire la password
     * dell'account gmail che non verrà in ogni caso salvata nei db.
     * 
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            
    throws ServletException, IOException, AuthenticationException, ServiceException {
        
        // Set up the URL and the object that will handle the connection:
        //serve per il reindirizzamento
        String nextJSP = null;
        
        HttpSession session=request.getSession();
        
        //la variabile provenienza mi dice da quale jsp � arrivata la richiesta. E' un campo hidden nele jsp
        if (request.getParameter("provenienza").equals("ricercaEvento")) {
           //primo passo per la visualizzazione e la prenotazione degli eventi
           //consideriamo solo la ricerca per "tutti", le altre non sono considerate 
          if(request.getParameter("button")==null ){
              session.setAttribute("Errore", "ricerca");
              nextJSP = "/index.jsp";
              
          }
          else{
           if (!(request.getParameter("button")).equals("tutti") && !(request.getParameter("button").equals("tipo"))) {
               String rice;
               if(request.getParameter("rice")==null){
                   
                    request.setAttribute("listaEventi", null);
                    nextJSP = "/erroreRicerca.html";

               }
               else{
               
              rice=request.getParameter("rice");
              session.setAttribute("rice", rice);
               
               if((request.getParameter("button")).equals("nome")){
                   List eventi = this.managerBean.trovaEventoNome(rice);
                    //passo la lista come parametro
                    request.setAttribute("listaEventi", eventi);


               }
                else if((request.getParameter("button")).equals("luogo")){
                   List eventi = this.managerBean.trovaEventoLuogo(rice);
                    //passo la lista come parametro
                    request.setAttribute("listaEventi", eventi);
                    

               }
                else if((request.getParameter("button")).equals("tipo"))
                {
                    if(request.getParameter("tipe")==null || request.getParameter("tipe").equals(" ")){
                         session.setAttribute("Errore", "ricercat");
                        

                    }
                    else{
                        List eventi = this.managerBean.trovaEventoTipo(request.getParameter("tipe")+"");
                        //passo la lista come parametro
                       request.setAttribute("listaEventi", eventi);
                    }

               }
               else{
                    try{
                   List eventi = this.managerBean.trovaEventoData(rice);
                    //passo la lista come parametro
                    request.setAttribute("listaEventi", eventi);
                    }catch(javax.ejb.EJBException e){}
                    

               }
               nextJSP = "/visualizzaEventi.jsp";
              }
           }
           else {   
               //cerco tutti gli eventi e li metto in una lista
               List eventi = managerBean.trovaEvento();
               //passo la lista come parametro
               request.setAttribute("listaEventi", eventi);
               nextJSP = "/visualizzaEventi.jsp";
           }
        }
        }
        
        //secondo passo per la visualizzazione degli eventi
        //qui controllo quale evento viene scelto dall'utente per la prenotazione
        if (request.getParameter("provenienza").equals("visualizzaEventi")) {
            List eventi = managerBean.trovaEvento();
            Evento ev;
            int codice;
            //nextJSP = "/index.jsp";
            
            //scorro la lista degli eventi e guardo quale ha scelto confrontando il radio button
            for(int i = 0; i<eventi.size();i++) {
                ev =(Evento) eventi.get(i);
                codice = ev.getCod();
                
                //controllo quale radiobutton � stato scelto
                if (request.getParameter("rad").equals(Integer.toString(codice))) { 
                    session.setAttribute("scelta",codice);
                    nextJSP = "/accessoPrenotazione.jsp";  
                }                                      
            }          
        }
        
        //terzo step per la prenotazione di un evento. Effettuo il controllo sull'accesso all'area con login
        //per l'utente
        if (request.getParameter("provenienza").equals("confermaPrenotazione")) {
            String psw;
            String loginUt;
            if ((session.getAttribute("login")==null)||(session.getAttribute("login")=="")) {  
                //nuovo accesso, salvo la sessione  
                loginUt = request.getParameter("login");
                psw = request.getParameter("password");
                session.setAttribute("login",loginUt);
                session.setAttribute("password",psw);
            }
            else { 
                //nel caso avesse gi� effettuato l'accesso
                loginUt = (String) session.getAttribute("login");
                psw = (String) session.getAttribute("password");
            }
            //cerco l'utente
            Utente ut = managerBean.trovaUtente(loginUt); 
            //se non l'ho trovato o la password non � corretta
            if ((ut==null)||(!(ut.getPassword().equals(psw)))) {
                session.setAttribute("login","");
                session.setAttribute("password",""); 
                
                nextJSP = "/autNonCorr.html";
            }
            else {  //cerco l'evento e ne salvo i campi
                int codice = ((Integer) session.getAttribute("scelta")).intValue();
                Evento ev = managerBean.trovaEvento(codice);
                //se non trovo l'evento
                
                if (ev == null) 
                    nextJSP = "/autNonCorr.html";
                else {
                  PrenotazionePK prenotazPK = new PrenotazionePK (ev.getCod(),loginUt);
                  Prenotazione p =managerBean.trovaPrenotazione(prenotazPK);
                    if(p != null)
                    {
                      List eventi = managerBean.trovaEvento();  
                      session.setAttribute("listaEventi", eventi);
                      request.setAttribute("errore","just");
                      
                      nextJSP = "/index.jsp";
                    }
                    else{
                    request.setAttribute("prezzo",ev.getPrezzo());
                    request.setAttribute("nome",ev.getNome());
                    request.setAttribute("data",ev.getDataevento());
                    request.setAttribute("ora",ev.getOra());
                    request.setAttribute("luogo",ev.getLuogo());
                    String cittaUt = ut.getCitta(); //citt� dell'utente
                    String cittaEv = ev.getLuogo(); //luogo dove si svolge l'evento
                    
                    if(ev.getViaggio()==0){request.setAttribute("viaggio", "no");}
                    else{
                        Viaggio v = managerBean.trovaViaggio(ev.getViaggio());
                        request.setAttribute("codiceViaggio", v.getCod());
                        DistanzaPK dist = new DistanzaPK(cittaUt,cittaEv,v.getCod());
                    //cerco nella tabella distanze per proporgli eventualmente il viaggio
                        Distanza distanzaTrovata = managerBean.trovaDistanza(dist);
                        if (distanzaTrovata == null) request.setAttribute("viaggio", "no");                        
                        else {request.setAttribute("viaggio", "si"); //gli propongo il viaggio  
                               int pric=distanzaTrovata.getPrezzo();
                                request.setAttribute("prv", pric);
                                
                        }
                    
                      
                   }
                    nextJSP = "/prenota.jsp";
                    }
                }
            }           
        }
  
        
        //ultima fase prenotazione evento
        if (request.getParameter("provenienza").equals("prenota")) {
            int codiceEv = ((Integer) session.getAttribute("scelta")).intValue();
            //cerco l'evento e salvo i valori
            //MODIFICARE L'AGGIUNTA DEL VIAGGIO E LA PRENOTAZIONE
            Evento ev = managerBean.trovaEvento(codiceEv);
            int prezzo = ev.getPrezzo();
           
            String mail =(String) session.getAttribute("login");
            java.util.Date d= new java.util.Date();
            int s = (Integer.parseInt(""+d.getMonth()))+1;
            String a= d.getDate()+"-"+s+"-2012";
           
            String dataPren = a; //in successiva implementazione fatta meglio
            int numeroPosti = (Integer.valueOf(request.getParameter("numeroBiglietti")).intValue());
           
            int costoTotale=numeroPosti * prezzo; //costo totale senza viaggio
        
            
            PrenotazionePK prenotazPK = new PrenotazionePK (codiceEv,mail);
            Prenotazione pren = new Prenotazione(prenotazPK,numeroPosti,costoTotale,dataPren);
            
            
                    if(request.getParameter("viaggio")!=null)
                    {                                                 
                        pren.setCodiceViaggio(ev.getViaggio());
                        int prv= Integer.parseInt(""+session.getAttribute("prv"));                        
                        costoTotale=costoTotale+prv*numeroPosti;
                        request.setAttribute("viaggio", "si");
                        pren.setImportoTotale(costoTotale);                                                                                                       
                    }
                    else{ request.setAttribute("viaggio", "no");}

                    
                        request.setAttribute("posti", numeroPosti);
                        request.setAttribute("nome", ev.getNome());
                         request.setAttribute("ora", ev.getOra());
                         request.setAttribute("prezzo", ev.getPrezzo());                         
                         request.setAttribute("luogo", ev.getLuogo());                         
                        request.setAttribute("data", ev.getDataevento());
                        request.setAttribute("costoTotale", costoTotale);
                        request.setAttribute("operaz", "prenota");

                    //salvo la prenotazione
                    if(request.getParameter("pswgm")!=null){
                        String ps=request.getParameter("pswgm");
                        if((request.getParameter("pswgm").equals(""))){
                            request.setAttribute("errore","null");
                            nextJSP = "/prenota.jsp";
                        }  
                        else{
                            CalendarFeedD cal = new CalendarFeedD();
                    boolean creaEv = cal.creaEvUser(mail, ps, ev.getDataevento(), ev.getNome());
                    if(creaEv){
                        managerBean.salva(pren);
                        session.setAttribute("scelta", "");
                        request.setAttribute("operaz", "prenota");
                        nextJSP = "/ok.jsp";

                    }else {
                            request.setAttribute("errore","null");
                            nextJSP = "/prenota.jsp";
                    
                          }
                    }
                        
                        
                    }
                    else{
                    
                        managerBean.salva(pren);
 
                        request.setAttribute("operaz", "prenota");
                        nextJSP = "/ok.jsp";
                    }
                
        }
        
        //registrazione utente
        if (request.getParameter("provenienza").equals("registraUtente")) {
            //salvo i dati dell'utente nel session bean stateful
            utenBean.setNome(request.getParameter("nome"));
            nome=utenBean.getNome();
            request.setAttribute("nome",nome);
            utenBean.setCognome(request.getParameter("cognome"));
            cognome=utenBean.getCognome();
            request.setAttribute("cognome",cognome);
            utenBean.setTelefono(request.getParameter("telefono"));
            telefono=utenBean.getTelefono();
            request.setAttribute("telefono",telefono);
            utenBean.setIndirizzo(request.getParameter("indirizzo"));
            indirizzo=utenBean.getIndirizzo();
            request.setAttribute("indirizzo",indirizzo);
            utenBean.setCodiceFiscale(request.getParameter("codiceFiscale"));
            codiceFiscale=utenBean.getCodiceFiscale();
            request.setAttribute("codiceFiscale",codiceFiscale);
            utenBean.setCitta(request.getParameter("citta"));
            citta=utenBean.getCitta();
            request.setAttribute("citta",citta);
            utenBean.setPassword(request.getParameter("password"));
            password=utenBean.getPassword();
            request.setAttribute("password",password);
            utenBean.setRippassword(request.getParameter("rippassword"));
            rippassword=utenBean.getRippassword();
            request.setAttribute("rippassword",rippassword);
            utenBean.setLogin(request.getParameter("login"));
            login=utenBean.getLogin();
            request.setAttribute("login",login);
           
            session.setAttribute("login",login);
            session.setAttribute("password",password);
     
            //se qualche campo non � stato completato 
            if ((request.getParameter("nome").equals(""))||(request.getParameter("cognome").equals(""))||(request.getParameter("indirizzo").equals(""))||(request.getParameter("citta").equals(""))||(request.getParameter("password").equals(""))||(request.getParameter("rippassword").equals(""))||(request.getParameter("telefono").equals(""))||(request.getParameter("login").equals(""))||(request.getParameter("codiceFiscale").equals(""))||(request.getParameter("nome")==null)||(request.getParameter("cognome")==null)||(request.getParameter("indirizzo")==null)||(request.getParameter("citta")==null)||(request.getParameter("password")==null)||(request.getParameter("rippassword")==null)||(request.getParameter("telefono")==null)||(request.getParameter("login")==null)||(request.getParameter("codiceFiscale")==null)) {
                request.setAttribute("errore","null");
                nextJSP = "/registraUtente.jsp";
            }
            else if (!(request.getParameter("password").equals(request.getParameter("rippassword")))) {
                // se i due campi password non coincidono
                request.setAttribute("errore","password");
                nextJSP = "/registraUtente.jsp";
            }
            else { 
                //se l'utente esiste gi� faccio la ridirezione a modifica dati
                Utente ut = managerBean.trovaUtente(login);                   
                if (ut!=null) {      //sono sicuramente in modifica, ma faccio comunque un controllo per maggior sicurezza                 
                    if (ut.getPassword().equals(password)) { 
                        request.setAttribute("nome",ut.getNome());
                        request.setAttribute("cognome",ut.getCognome());
                        request.setAttribute("telefono",ut.getTelefono());
                        request.setAttribute("indirizzo",ut.getIndirizzo());
                        request.setAttribute("codiceFiscale",ut.getCodFiscale());
                        request.setAttribute("citta",ut.getCitta());
                        request.setAttribute("password",ut.getPassword());
                        request.setAttribute("rippassword",ut.getPassword());
                        request.setAttribute("login",ut.getEmail());
                        if (request.getParameter("operaz").equals("modifica")) { 
                            // modifico i campi dell'utente
                            Utente utente=new Utente(utenBean.getLogin(),utenBean.getNome(),utenBean.getCognome(),utenBean.getCodiceFiscale(),utenBean.getCitta(),utenBean.getIndirizzo(),utenBean.getPassword(),utenBean.getTelefono());
                            managerBean.aggiornaUtente(utente); 
                            request.setAttribute("operaz","modifica"); 
                            nextJSP = "/ok.jsp";
                        }
                        else {
                            request.setAttribute("operaz","modifica"); 
                            nextJSP = "/modificaUtenteDati.jsp";
                             
                        }
                    }
                    else {  
                        //l'utente prova a registrarsi con un login che gi� esiste
                        request.setAttribute("password","");
                        request.setAttribute("rippassword","");
                        request.setAttribute("login","");
                        request.setAttribute("operaz","giaRegistrato"); 
                        nextJSP = "/modificaUtenteDati.jsp";
                    }                          
                }  
                else {
                    if (request.getParameter("operaz").equals("registra")) {
                        //se tutto ok registro il nuovo utente
                        Utente utente=new Utente(utenBean.getLogin(),utenBean.getNome(),utenBean.getCognome(),utenBean.getCodiceFiscale(),utenBean.getCitta(),utenBean.getIndirizzo(),utenBean.getPassword(),utenBean.getTelefono());  
                        managerBean.salva(utente);
                        
                      String prova=login;
                     String[] it = prova.split("@");
                               
                    //aggiunge un feed di google calendar per l'utente appena registrato     
                        if(it.length==2 && it[1].equals("gmail.com")){
                            CalendarFeedD cal = new CalendarFeedD();
                            cal.addSub(login);
                            
                        }
                        request.setAttribute("operaz","registra");
                        nextJSP = "/ok.jsp"; 
                    }                                              
                }
            }        
        }    
 
        //in modifica dati utente riutilizzo la procedura di registra perch� sono simili
        if (request.getParameter("provenienza").equals("modificaUtente")) {
            String psw;
            String loginUt;
            if (request.getParameter("operaz").equals("modifica")) {
                loginUt = request.getParameter("login");
                psw = request.getParameter("password");
                session.setAttribute("login",loginUt);
                session.setAttribute("password",psw);
            }
            else { 
                //nel caso fosse gia registrato
                loginUt = (String) session.getAttribute("login");
                psw = (String) session.getAttribute("password");
            }
            //  cerco l'utente per evdere se è gia registrato
            Utente ut = managerBean.trovaUtente(loginUt); 
            //se non lo trovo
            if ((ut==null)||(!(ut.getPassword().equals(psw)))) {
                session.setAttribute("login","");
                session.setAttribute("password","");
                nextJSP = "/autenticazioneNonCorretta.html";
            }
            else {
                request.setAttribute("nome",ut.getNome());
                request.setAttribute("cognome",ut.getCognome());
                request.setAttribute("indirizzo",ut.getIndirizzo());
                request.setAttribute("telefono",ut.getTelefono());
                request.setAttribute("citta",ut.getCitta());
                request.setAttribute("codiceFiscale",ut.getCodFiscale());
                request.setAttribute("login",loginUt);
                request.setAttribute("password",psw);
                request.setAttribute("operaz","modifica");
                nextJSP = "/modificaUtenteDati.jsp";  // da modificaUtenteDati.jsp vado poi in registra perch� riutilizzo la stessa procedura
            }
        }
        
        
        //cancella un utente iscritto
        if (request.getParameter("provenienza").equals("cancellaUtente")) {
            String psw;
            String loginUt;
            if (request.getParameter("operaz").equals("cancella")) { 
                //nuovo accesso   
                if(request.getParameter("login")==null && request.getParameter("password")==null){
                    loginUt = (String) session.getAttribute("login");                    
                    psw = (String) session.getAttribute("password");                    
                }
                else
                {
                    loginUt = request.getParameter("login");
                    psw = request.getParameter("password");
                    session.setAttribute("login",loginUt);
                    session.setAttribute("password",psw);                
                }
            }                            
            else { 
                //nel caso avesse gi� effettuato l'accesso
                loginUt = (String) session.getAttribute("login");
                psw = (String) session.getAttribute("password");
            }//FARE CAMBIAMENTI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          if(!(session.getAttribute("login").equals("admin")) && !(session.getAttribute("password").equals("admin"))){
            //cerco l'utente 
            Utente ut = managerBean.trovaUtente(loginUt); 

            // se non lo trovo
            if ((ut==null)||(!(ut.getPassword().equals(psw)))) {
                session.setAttribute("login","");
                session.setAttribute("password","");
                nextJSP = "/autenticazioneNonCorretta.html";
            }
            else {
               List eventi = managerBean.trovaEventoUtente(ut.getEmail());
             
               //visualizzo la prenotazione per estrarre le informazioni
            for(int i=0; i<eventi.size(); i++){
                Evento e= (Evento) eventi.get(i);
                int j=0;
                PrenotazionePK pk= new PrenotazionePK(e.getCod(),loginUt);
                Prenotazione p= managerBean.trovaPrenotazione(pk);
                if(p!=null){managerBean.removePrenotazione(pk);}
                
                
                
            
            }
                  
                     String prova=ut.getEmail();
                     String[] it = prova.split("@");                                
                    //rimuove il feed di google calendar per l'utente appena registrato     
                        if(it.length==2 && it[1].equals("gmail.com")){
                             CalendarFeedD cal = new CalendarFeedD();
                             cal.delAcc(ut.getEmail());
                            
                        }
                                                                         
            

            boolean rimuoviUtente = managerBean.rimuoviUtente(ut.getEmail());
            
            if(rimuoviUtente){
                 request.setAttribute("operaz","cancellaUtente");
                 session.setAttribute("login", null);
                 session.setAttribute("password", null);
                 nextJSP = "/ok.jsp";
            }
            else{
                nextJSP = "/autNonCorr.html";
            }
                
                
                
               
            }
            }else          
                {
              if (request.getParameter("mail")!=null){
                             Utente ut = managerBean.trovaUtente(request.getParameter("mail")); 

            // se non lo trovo
                        if ((ut==null)) {
                        session.setAttribute("login","");
                        session.setAttribute("password","");
                        nextJSP = "/autenticazioneNonCorretta.html";
                        }
                        else{
               List eventi = managerBean.trovaEventoUtente(ut.getEmail());
             
               //visualizzo la prenotazione per estrarre le informazioni
            for(int i=0; i<eventi.size(); i++){
                Evento e= (Evento) eventi.get(i);
                int j=0;
                PrenotazionePK pk= new PrenotazionePK(e.getCod(),loginUt);
                Prenotazione p= managerBean.trovaPrenotazione(pk);
                if(p!=null){boolean t=managerBean.removePrenotazione(pk);}
                
                
                
            }
            boolean rimuoviUtente = managerBean.rimuoviUtente(ut.getEmail());
            if(rimuoviUtente){
                 request.setAttribute("operaz","cancellaUtente");
                 nextJSP = "/ok.html";
            }
            else{
                nextJSP = "/autNonCorr.html";
            }

                        }
 
          }                              
          else{nextJSP = "/autenticazioneNonCorretta.html";}

                
                }
            
        }
        
        if ((request.getParameter("provenienza").equals("aggiungiEvento"))) {
            if ((session.getAttribute("login").equals("admin")) && session.getAttribute("password").equals("admin"))
            {
                int num= this.managerBean.getCountEvent()+1;
                if(this.managerBean.trovaEvento(num)==null){
                    
                }
                session.setAttribute("cod", num);                                 
                request.setAttribute("cod", num);                                 
                nextJSP = "/aggiungiEventoDati.jsp";}
            else{
            if ((!((session.getAttribute("login").equals("admin"))) || !(session.getAttribute("password").equals("admin"))) ||
                (session.getAttribute("login")==null) || session.getAttribute("password")==null)
            {nextJSP = "/autenticazioneNonCorretta.html";}
            else{
          
           if (!(request.getParameter("login").equals("admin"))&& !(request.getParameter("password").equals("admin")))
                nextJSP = "/autenticazioneNonCorretta.html";
            else{
                
                        
               List viaggi = managerBean.getViaggi();
               //passo la lista come parametro
               request.setAttribute("listaViaggi", viaggi);
                nextJSP = "/aggiungiEventoDati.jsp";  
            }
            }  
            }
        }
        
        if((request.getParameter("provenienza").equals("aggiungiEventoDati"))) {
            if ((request.getParameter("ora").equals(""))||
                    (request.getParameter("luogo").equals(""))||
                    (request.getParameter("nome").equals(""))||
                    (request.getParameter("prezzo").equals(""))||
                    (request.getParameter("tipo").equals(""))||
                    (request.getParameter("posti").equals(""))||
                    (request.getParameter("dataevento").equals(""))||
                    
                    
                    (request.getParameter("ora")==null)||
                    (request.getParameter("luogo")==null)||
                    (request.getParameter("nome")==null)||
                    (request.getParameter("prezzo")==null)||
                    (request.getParameter("tipo")==null)||(request.getParameter("posti")==null)||(request.getParameter("dataevento")==null)) {
                request.setAttribute("errore","null");
                nextJSP = "/aggiungiEventoDati.jsp";
            }
            else {
                
                Evento evento = new Evento(this.managerBean.getCountEvent()+1, request.getParameter("tipo"), request.getParameter("nome"), request.getParameter("dataevento"), request.getParameter("ora"), request.getParameter("luogo"), Integer.parseInt(request.getParameter("prezzo")), Long.parseLong(request.getParameter("posti")));
                if(request.getParameter("viaggio")!=null || !(request.getParameter("viaggio").equals(""))){
                    int viaggio=0;
                    try{
                    viaggio = (Integer.valueOf(request.getParameter("viaggio")).intValue());                                                            
                    }
                    catch (Exception e){
                      viaggio=0;    
                    }
                    evento.setViaggio(viaggio);
                    DistanzaPK pkd= new DistanzaPK("Torino", evento.getLuogo(), evento.getViaggio());
                    Distanza d= managerBean.trovaDistanza(pkd);
                    if(d==null && !evento.getLuogo().equals("Torino")){
                        managerBean.salvaDistanzaPk(pkd);
                    }
                    
                }
                managerBean.salva(evento);
                String data = evento.getDataevento();

 
                CalendarFeedD cal = new CalendarFeedD();
                boolean creaEv = cal.creaEvPrivate(data, evento.getNome());

                if(creaEv){
                             request.setAttribute("operaz","addEvento");
                nextJSP = "/ok.jsp"; 
       
                }else{
                request.setAttribute("operaz","addEvento");
                nextJSP = "/autNonCorr.jsp"; 
                    
                }
               

            }
        }
        
        // questi sono i servizi che non sono stati implementati
        if ((request.getParameter("provenienza").equals("rimuoviEvento"))/*||(request.getParameter("provenienza").equals("aggiungiEvento"))*/) {
            if ((request.getParameter("login").equals("admin"))&& (request.getParameter("password").equals("admin"))) {    
                nextJSP = "/nonImplementato.jsp";
            }
            else {
                nextJSP = "/autenticazioneNonCorretta.html";
            }
        }
        
                //Se accede dal link accedi ritorna i dati e porta all'index
        if (request.getParameter("provenienza").equals("accediUt"))
            {
            String psw;
            String loginUt;
                
                
        
            if (request.getParameter("operaz").equals("accedi")) {

                loginUt = request.getParameter("login");
                psw = request.getParameter("password");
                session.setAttribute("login",loginUt);
                session.setAttribute("password",psw);
                    
            }
            else { 
                //nel caso fosse gia registrato                
                loginUt = (String) session.getAttribute("login");
                psw = (String) session.getAttribute("password");
            }
            //FARE IL CONTROLLO SULL'ADMIN QUI!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            //  cerco l'utente per evdere se è gia registrato
           if ((request.getParameter("login").equals("admin"))&& (request.getParameter("password").equals("admin"))){
                request.setAttribute("cognome","admin");    
                CalendarFeedD cal = new CalendarFeedD();
                 cal.setAccess(2);
                session.setAttribute("login","admin");
                session.setAttribute("password","admin");
                session.setAttribute("verifica", "ad");
                nextJSP = "/index.jsp"; }
            else{

            Utente ut = managerBean.trovaUtente(loginUt); 
            //se non lo trovo
            if ((ut==null)||(!(ut.getPassword().equals(psw)))) {
                session.setAttribute("login",null);
                session.setAttribute("password",null);
                session.setAttribute("verifica", null);
                nextJSP = "/autenticazioneNonCorretta.html";
            }
            else {

                session.setAttribute("nome",ut.getCognome());
                request.setAttribute("cognome", ut.getCognome());
                request.setAttribute("operaz","visualizzaEventi");
                session.setAttribute("login",ut.getEmail());
                request.setAttribute("password", ut.getPassword());
                request.setAttribute("provenienza", "ricercaEvento");
                nextJSP = "/index.jsp";
            }
           }
                
          
         }
//rimuoviPrenota
        //primo step visualizzo le prenotazioni dell'utente                           
     if (request.getParameter("provenienza").equals("visPren")) {
                String loginUt;
                String psw;
            if (request.getParameter("operaz").equals("accedi")) {

                loginUt = request.getParameter("login");
                psw = request.getParameter("password");
                session.setAttribute("login",loginUt);
                session.setAttribute("password",psw);
                    
            }
            else { 
                //nel caso fosse gia registrato                
                loginUt = (String) session.getAttribute("login");
                psw = (String) session.getAttribute("password");
            }
            Utente ut = managerBean.trovaUtente(loginUt); 
           
              int j=0;
            //se non lo trovo
            if ((ut==null)||(!(ut.getPassword().equals(psw)))) {
                session.setAttribute("login","");
                session.setAttribute("password","");
                nextJSP = "/autenticazioneNonCorretta.html";
            }
            
            
            else {
                //cerco tutti gli eventi e li metto in una lista
               List eventi = managerBean.trovaEvento();
             
               //visualizzo la prenotazione per estrarre le informazioni
            for(int i=0; i<eventi.size(); i++){
                Evento e= (Evento) eventi.get(i);
                
                PrenotazionePK pk= new PrenotazionePK(e.getCod(),loginUt);
                Prenotazione p = managerBean.trovaPrenotazione(pk);
                  if(p==null){                      
                      j++;
                      eventi.set(i, null);
                  }
                  else{
                ((Evento)eventi.get(i)).setPosti(p.getNumPostiPrenotati());
                ((Evento)eventi.get(i)).setPrezzo(p.getImportoTotale());
                
                  }
                
            }
            

                if(j==eventi.size()){
               request.setAttribute("listaEventi", null);               
                nextJSP = "/accessoPrenotDati.jsp";
                }
            else{
               //passo la lista come parametro
              // request.setAttribute("listaEventi", eventi);
               request.setAttribute("listaEventi", eventi);               
               nextJSP = "/accessoPrenotDati.jsp";
                
            }
                


               
                
            }

        }
    //secondo step verifico i 
     
         if (request.getParameter("provenienza").equals("rimuoviPrenota")) {
            List eventi = managerBean.trovaEvento();
            Evento ev;
            int codice;
          
            if(request.getParameter("rad")==null){
                nextJSP = "/autNonCorr.jsp";
            }
            //scorro la lista degli eventi e guardo quale ha scelto confrontando il radio button
            else{
            for(int i = 0; i<eventi.size();i++) {
                ev =(Evento) eventi.get(i);
                codice = ev.getCod();
                
                //controllo quale radiobutton � stato scelto
                if (request.getParameter("rad").equals(Integer.toString(codice))) { 
                    session.setAttribute("scelta",codice);
                    nextJSP = "/accessoPrenot2.jsp";  
                }                                      
            }  
            }
        }

     
         if (request.getParameter("provenienza").equals("rimPren")) 
               {
           int codiceEv = ((Integer) session.getAttribute("scelta")).intValue();
            //cerco l'evento e salvo i valori
            //MODIFICARE L'AGGIUNTA DEL VIAGGIO E LA PRENOTAZIONE
            Evento ev = managerBean.trovaEvento(codiceEv);
            String mail =(String) session.getAttribute("login");

          
            
            //cerco l'utente           
            PrenotazionePK pk = new PrenotazionePK (codiceEv,mail);

            request.setAttribute("nome", ev.getNome());
            request.setAttribute("data", ev.getDataevento());

            request.setAttribute("operaz", "canc");
            request.setAttribute("prezzo",ev.getPrezzo());
            request.setAttribute("nome",ev.getNome());
            request.setAttribute("data",ev.getDataevento());
            request.setAttribute("ora",ev.getOra());
            request.setAttribute("luogo",ev.getLuogo());
                    
                   if(request.getParameter("pswgm")!=null){
                        String ps=request.getParameter("pswgm");
                        if((request.getParameter("pswgm").equals(""))){
                            request.setAttribute("errore","null");
                            nextJSP = "/accessoPrenot2.jsp";
                        }  
                        else{
                            CalendarFeedD cal = new CalendarFeedD();
                    boolean creaEv = cal.deleteUserEvent(mail, ps, ev.getDataevento(), ev.getNome());//eliminare l'evento
                    if(creaEv){
               managerBean.removePrenotazione(pk);
     //rosario
                                       
                      String prova=mail;
                     String[] it = prova.split("@");
                                
                    //aggiunge un feed di google calendar per l'utente appena registrato     
                        if(it.length==2 && it[1].equals("gmail.com")){

                            cal.setAccess(codiceEv, mail, ps);
                            
                        }

             
               //passo la lista come parametro
              // request.setAttribute("listaEventi", eventi);
               request.setAttribute("operaz","rimuoviPren");
               nextJSP = "/ok.jsp";
                        

                    }else {
                            request.setAttribute("errore","null");
                            nextJSP = "/accessoPrenot2.jsp";
                    
                          }
                    }                                                
               }
               else{
                      
            managerBean.removePrenotazione(pk);
               
             
               //passo la lista come parametro
              // request.setAttribute("listaEventi", eventi);
               request.setAttribute("operaz","rimuoviPren");
               nextJSP = "/ok.jsp";
              }                                                
            }
          
        
        if (request.getParameter("provenienza").equals("logOut")) {
             session.setAttribute("login",null);
             session.setAttribute("password",null);
             session.setAttribute("verifica", null);
             nextJSP = "/index.jsp";
        }

        //ridirezione alle pagine jsp 
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
        dispatcher.forward(request,response);

   } 
      
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
   */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (AuthenticationException ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ServiceException ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (AuthenticationException ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ServiceException ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private Message createJMSMessageForjmsProvider(Session session, Object messageData) throws JMSException {
        TextMessage message = session.createTextMessage();
        message.setText(messageData.toString());
        return message;
    }

    private void sendJMSMessageToProvider(Object messageData) throws JMSException {
        Connection connection = null;
        Session session = null;
        try {
            connection = providerFactory.createConnection();
            session = connection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
            MessageProducer messageProducer = session.createProducer(provider);
            messageProducer.send(createJMSMessageForjmsProvider(session, messageData));
        } finally {
            if (session != null) {
                session.close();
            }
            if (connection != null) {
                connection.close();
            }
        }
    }
}